﻿using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Telerik.Web.UI;
using SMA.GENTEv1;

public partial class Protegidos_Empresas__popup_eppUploadValeRefeicaoColetivo : PageBase
{
    private const int ItemsPerRequest = 10;
    private int idContrato = 0;
    private const string dbPath = "arq/";

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (Request.QueryString["IdContrato"] != null)
                idContrato = int.Parse(Request.QueryString["IdContrato"].ToString());

            if (!IsPostBack)
            {
                VerificaVRColetivo();
                EditaParametros();
            }
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }

    #region Eventos
    protected void btnGravar_Click(object sender, EventArgs e)
    {
        try
        {
            BindValidResults();
            ExibeResultado();
            ExibirMensagem(false, "Operação efetuada com sucesso!");
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }

    protected void btnFechar_Click(object sender, EventArgs e)
    {
        ClientScript.RegisterStartupScript(Page.GetType(), "mykey", "CloseAndRebind();", true);
    }

    protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)
    {
        //if (e.Argument == "RebindContrato")
        //{
        //    RadGrid2.MasterTableView.SortExpressions.Clear();
        //    RadGrid2.MasterTableView.GroupByExpressions.Clear();
        //    RadGrid2.MasterTableView.CurrentPageIndex = RadGrid2.MasterTableView.PageCount - 1;
        //    RadGrid2.Rebind();
        //    CarregarDadosContrato();
        //}
    }
    #endregion

    #region Metodos
    private void VerificaVRColetivo()
    {
        try
        {
            ProcessoContrato processoContrato = new ProcessoContrato();
            bool possuiVRColetivo = processoContrato.RetornaProtocoloColetivoBeneficio(idContrato, (int)TipoBeneficio.TipoBenef.Vale_Refeicao);

            if (!possuiVRColetivo)
            {
                ExibeResultado();
                trResultado.Visible = false;

                string msgUsoProtocolo = "ATENÇÃO!!! Para o contrato selecionado pelo usuário, não foi identificado parametrização para uso de protocolo do Vale Refeição Coletivo.";
                msgUsoProtocolo += " Primeiro, configure para este contrato o uso de protocolo de Vale Refeição Coletivo e, após essa configuração";
                msgUsoProtocolo += ", retorne para esta mesma página para efetuar o upload.";

                throw new Exception(msgUsoProtocolo);
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void CarregaDadosTipoEntrega()
    {
        try
        {
            BeneficioOrganizacaoDocto beneficio = new BeneficioOrganizacaoDocto();

            rcbAnoTpMensal.DataTextField = "Ano";
            rcbAnoTpMensal.DataValueField = "Ano";
            rcbAnoTpMensal.DataSource = beneficio.CarregarComboAno();
            rcbAnoTpMensal.DataBind();
        }
        catch (Exception ex)
        {
            throw ex;
        }

    }

    private void BindValidResults()
    {
        try
        {
            if ((RadUpload1.UploadedFiles.Count > 0) || (lblArquivo.Text != string.Empty))
            {
                string nameFile = Salvar();

                foreach (UploadedFile validFile in RadUpload1.UploadedFiles)
                {
                    string targetFolder = Server.MapPath("~/Arq");
                    validFile.SaveAs(Path.Combine(targetFolder, nameFile), true);
                }

                labelNoResults.Visible = false;
                repeaterResults.Visible = true;
                repeaterResults.DataSource = RadUpload1.UploadedFiles;
                repeaterResults.DataBind();
            }
            else
            {
                labelNoResults.Visible = true;
                repeaterResults.Visible = false;
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private string Salvar()
    {
        try
        {
            BeneficioOrganizacaoDocto beneficio = new BeneficioOrganizacaoDocto();

            beneficio.Organizacao = new Organizacao(IdPrestador);
            beneficio.TipoBeneficio = new TipoBeneficio((int)TipoBeneficio.TipoBenef.Vale_Refeicao, false);
            if (rcbLocalidade.SelectedValue != string.Empty)
            {
                beneficio.Localidade = new Cidade(int.Parse(rcbLocalidade.SelectedValue));
                beneficio.TipoPeriodicidade = new TipoPeriodicidade(RetornaTipoPeriodicidade(idContrato, beneficio.Localidade.IdCidade));
            }
            beneficio.TipoPagamento = new TipoPagamento(16); // Fixado código para tipo de pagamento em Vale Alimentação quando for entrega única
            beneficio.DtValidade = DateTime.Parse(string.Concat("01/", rcbMesTpMensal.SelectedValue, "/", rcbAnoTpMensal.SelectedValue));
            beneficio.Path = dbPath;
            beneficio.Salvar();

            FileInfo _fileInfo = new FileInfo(beneficio.Path);

            return _fileInfo.Name;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void ExibeResultado()
    {
        try
        {
            trSeleciona.Visible = false;
            trResultado.Visible = true;
            trMsg.Visible = false;
            btnGravar.Visible = false;

            trLocalidade.Visible = false;
            trMensal.Visible = false;
            trMensalMes.Visible = false;
        }
        catch (Exception ex)
        {
            throw ex;
        }

    }

    private void CarregaLocalidade()
    {
        try
        {
            BeneficioOrganizacaoDocto beneficio = new BeneficioOrganizacaoDocto();

            rcbLocalidade.DataTextField = "NomeCidade";
            rcbLocalidade.DataValueField = "IdCidade";
            rcbLocalidade.DataSource = beneficio.CarregarLocalidadesBeneficioColetivo((int)TipoBeneficio.TipoBenef.Vale_Refeicao, IdPrestador, idContrato);
            rcbLocalidade.DataBind();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void CarregaTamanhoDocto(int idTipoDocumento)
    {
        try
        {
            // seta o tamanho máximo do arquivo
            TipoDocumento tipodocto = new TipoDocumento(idTipoDocumento);
            RadUpload1.MaxFileSize = tipodocto.TamanhoDocumento;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void EditaParametros()
    {
        try
        {
            CarregaLocalidade();
            OcultaCampos(true);
            CarregaDadosTipoEntrega();
            CarregaTamanhoDocto((int)TipoDocumento.TipoDocto.Beneficios_VR);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private int RetornaTipoPeriodicidade(int idContrato, int idLocalidade)
    {
        try
        {
            int resultado = 0;

            List<WorkflowConfigData> listWfConfigData = new List<WorkflowConfigData>();
            WorkflowConfigData WfConfigData = new WorkflowConfigData();

            listWfConfigData = WfConfigData.BuscarPeriodicidade((int)TipoBeneficio.TipoBenef.Vale_Refeicao, idContrato, idLocalidade);

            if (listWfConfigData.Count > 0)
                resultado = listWfConfigData[0].TipoPeriodicidade.IdTipoPeriodicidade;

            return resultado;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private static string GetStatusMessage(int offset, int total)
    {
        try
        {
            if (total <= 0)
                return "No matches";

            return String.Format("Items <b>1</b>-<b>{0}</b> de <b>{1}</b>", offset, total);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void ExibirMensagem(bool _msgErro, string _textoMsg)
    {
        try
        {
            OcultaMsgPagina(false);
            if (_msgErro)
            {
                lblResultado.ForeColor = System.Drawing.Color.Red;
                lblResultado.Text = _textoMsg;
            }
            else
            {
                lblResultado.ForeColor = System.Drawing.Color.Black;
                lblResultado.Text = _textoMsg;
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void OcultaCampos(bool oculta)
    {
        try
        {
            trResultado.Visible = !oculta;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void OcultaMsgPagina(bool oculta)
    {
        try
        {
            trMensagem.Visible = !oculta;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    #endregion
}
